<?php
// +----------------------------------------------------------------------
// | 海豚PHP框架 [ DolphinPHP ]
// +----------------------------------------------------------------------
// | 版权所有 2016~2019 广东卓锐软件有限公司 [ http://www.zrthink.com ]
// +----------------------------------------------------------------------
// | 官方网站: http://dolphinphp.com
// +----------------------------------------------------------------------

namespace app\mill\admin;

use app\admin\controller\Admin;
use app\common\builder\ZBuilder;
use app\mill\model\Client as ClientModel;
use think\Db;
use think\facade\Env;

/**
 * 客户控制器
 * @package app\admin\controller
 */
class Index extends Admin
{
    //首页
    public function index(){

        return $this->fetch();
    }
    /**
     * 客户列表页
     * @return mixed
     * @throws \think\Exception
     * @throws \think\exception\DbException
     */
    public function client()
    {
        cookie('__forward__', $_SERVER['REQUEST_URI']);

        // 获取查询条件
        $map = $this->getMap();
        // 数据列表
        $data_list = Db::name('mill_client')
            ->alias('c')
            ->field('c.*')
            ->leftJoin('mill_order o','o.client_id=c.id')
            ->where($map)
            ->group('c.id')
            ->order('c.id desc')
            ->paginate();

        // 使用ZBuilder快速创建数据表格
        return ZBuilder::make('table')
            ->setPageTitle('客户列表（客户数量'.$data_list->total().'）') // 页面标题
            ->setTableName('mill_client') // 设置表名
            ->hideCheckbox()
            ->setSearch(['c.company'=>'公司sgggg','c.mobile'=>'电话'])
            ->setSearchArea([
                ['text:2', 'c.company', '客户公司', 'like'],
                ['text:2', 'c.mobile', '客户联系电话', 'like'],
                //['text:2', 'c.back', '跟单人员', 'like'],
                ['text:2', 'c.sales', '销售经理', 'like'],
                //['daterange:2', 'create_time', '日期'],
            ])
            ->addColumns([ // 批量添加列
                ['id', '客户序号'],
                ['company', '客户公司'],
                ['nickname', '指定收货人'],
                ['mobile', '指定收货人电话'],
                ['address', '客户地址'],
                ['sales', '销售经理'],
                //['sales_mobile', '销售电话'],
                //['back', '跟单人员'],
                //['create_time', '添加日期','date'],
                ['note', '备注','popover'],
                ['right_button', '操作', 'btn']
            ])
            //->addColumn('back', '类型', 'select', ['a' =>'类型A','b' => '类型B','c' => '类型C'])
            ->addTopButtons('add') // 批量添加顶部按钮
            ->addRightButtons('edit') // 批量添加右侧按钮
            ->addRightButton('order', ['title' => '添加工程', 'href' => url('mill/order/add', [ 'client_id' => '__id__']), 'icon' => ''])
            ->addRightButton('order', ['title' => '查看工程', 'href' => url('mill/order/index')."?_s=client_id=__id__&_o=client_id=eq", 'icon' => ''])
            ->setRowList($data_list) // 设置表格数据
            ->setColumnWidth([
                'id'  => 60,
                'note'  => 100,
                'mobile'  => 80,
                'sales_mobile'  => 80,
                'address'  => 150,
            ])
            ->fetch(); // 渲染模板
    }

    /**
     * 新增
     * @return mixed
     */
    public function add()
    {
        if ($this->request->isPost()) {
            $data = input();
            // 验证
            $result = $this->validate($data, 'Client');
            // 验证失败 输出错误信息
            if(true !== $result) $this->error($result);

            $data['create_time'] = empty($data['create_time'])?time():strtotime($data['create_time']);
            $data['update_time'] = time();
            if (ClientModel::create($data)) {
                $this->success('操作成功', url('index'));
            }
            $this->error('操作失败');
        }


        return ZBuilder::make('form')
            ->setPageTitle('新增客户') // 页面标题
            ->addFormItems([ // 批量添加表单项
                ['text:||||must', 'company', '客户公司'],
                ['text', 'address', '客户地址'],
                ['text', 'nickname', '指定收货人'],
                ['text', 'mobile', '指定收货人电话'],
                ['text:||||must', 'sales', '销售经理'],
                //['text:||||must', 'sales_mobile', '手机电话'],
                //['text:||||must', 'back', '跟单人员'],
                ['date:||||must', 'create_time', '日期'],
                ['textarea', 'note', '备注'],
            ])
            ->layout(['note'=>12])
            ->fetch();
    }

    /**
     * 编辑
     * @param null $id 客户id
     * @return mixed
     */
    public function edit($id=null)
    {

        $id = input('param.id');
        // 获取数据
        $info = ClientModel::find($id);

        if ($this->request->isPost()) {
            $data = $this->request->post();
            // 验证
            $result = $this->validate($data, 'Client');
            // 验证失败 输出错误信息
            if(true !== $result) $this->error($result);

            $data['create_time'] = empty($data['create_time'])?$info['create_time']:strtotime($data['create_time']);
            $data['update_time'] = time();
            // 更新数据
            if (ClientModel::update($data)) {
                $this->success('编辑成功', cookie('__forward__'));
            } else {
                $this->error('编辑失败');
            }
        }

        // 使用ZBuilder快速创建表单
        return ZBuilder::make('form')
            ->setPageTitle('编辑客户')
            ->addFormItem('hidden', 'id')
            ->addFormItems([ // 批量添加表单项
                ['text:||||must', 'company', '客户公司'],
                ['text', 'address', '客户地址'],
                ['text', 'nickname', '指定收货人'],
                ['text', 'mobile', '指定收货人电话'],
                ['text:||||must', 'sales', '销售经理'],
                //['text:||||must', 'sales_mobile', '手机电话'],
                //['text:||||must', 'back', '跟单人员'],
                ['date:||||must', 'create_time', '日期'],
                ['textarea', 'note', '备注'],
            ])
            ->setFormData($info)
            ->layout(['note'=>12])
            ->fetch();
    }

    /**
     * 删除
     * @param array $record 行为日志
     * @throws \think\Exception
     * @throws \think\exception\PDOException
     */
    public function delete($record = [])
    {
        return $this->setStatus('delete');
    }

    /**
     * 启用
     * @param array $record 行为日志
     * @throws \think\Exception
     * @throws \think\exception\PDOException
     */
    public function enable($record = [])
    {
        return $this->setStatus('enable');
    }

    /**
     * 禁用
     * @param array $record 行为日志
     * @throws \think\Exception
     * @throws \think\exception\PDOException
     */
    public function disable($record = [])
    {
        return $this->setStatus('disable');
    }

    /**
     * 设置客户状态：删除、禁用、启用
     * @param string $type 类型：delete/enable/disable
     * @param array $record
     * @throws \think\Exception
     * @throws \think\exception\PDOException
     */
    public function setStatus($type = '', $record = [])
    {
        $ids = $this->request->isPost() ? input('post.ids/a') : input('param.ids');
        $ids = (array)$ids;

        foreach ($ids as $id) {

            switch ($type) {
                case 'enable':
                    if (false === ClientModel::where('id', $id)->setField('status', 1)) {
                        $this->error('启用失败，客户ID：'.$id);
                    }
                    break;
                case 'disable':
                    if (false === ClientModel::where('id', $id)->setField('status', 0)) {
                        $this->error('禁用失败，客户ID：'.$id);
                    }
                    break;
                case 'delete':

                    if (false === ClientModel::where('id', 'in', $id)->delete()) {
                        $this->error('删除失败，客户ID：'.$id);
                    }
                    break;
                default:
                    $this->error('非法操作');
            }

            action_log('role_'.$type, 'mill', $id, UID);
        }

        $this->success('操作成功');
    }
}
